package com.xatu.yl.storeshopping.util.db;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {
	//具体的评论信息
	public static final String TB_NAME_COMMENT_INFO = "commentDataInfo";

	public static final int DATABASE_VERSION = 1;
	public static final String DB_NAME = "meltaApp";

	/**
	 * 构造方法
	 * //@param context上下文环境
	 * //@param name数据库名
	 * //@param factory可选的游标工厂（通常是 Null）
	 * //@param version数据库的版本（整形数据）
	 */
	public DBHelper(Context context, String name, CursorFactory factory,
					int version) {
		super(context, name, factory, version);
	}

	//初始化
	public DBHelper(Context context) {
		this(context, DB_NAME, null, DATABASE_VERSION);
	}

	/**
	 * 创建数据库后，对数据库的操作
	 */
	public void onCreate(SQLiteDatabase db) {
		//建立表格
		//如果修改数据库一定要修改DATABASE_VERSION，切记切记！！！
		if(!tableIsExist(TB_NAME_COMMENT_INFO)){
			//不存在表时，创建表
			/*
			 * uuid：该条记录的唯一标识
			 * user_icon：用户图标
			 * user_name：用户名
			 * publish_time：发布时间
			 * focus_status：关注状态
			 * publisher_commit：发布者发布的具体语言
			 * publisher_image：该Item评论的具体图片
			 *
			 * */
			String sql = "CREATE TABLE  " + TB_NAME_COMMENT_INFO + " (  uuid varchar PRIMARY KEY NOT NULL,  " +
					"user_icon varchar,  user_name varchar,  publish_time Date,  " +
					"focus_status int, publisher_commit text,  publisher_image int)";
			db.execSQL(sql);
		}
	}


	/**
	 * 数据库更新的方法
	 */
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		if(newVersion > oldVersion){
			//如果存在更新版本的数据库
			//则删除掉原来的数据库表，建立新的数据库表
			db.execSQL("DROP TABLE IF EXISTS " + TB_NAME_COMMENT_INFO);
			//建立新的数据库
			onCreate(db);
		}
	}

	private boolean tableIsExist(String tableName){
		boolean result = false;
		if(tableName == null){
			return false;
		}
		SQLiteDatabase db = null;
		Cursor cursor = null;
		try {
			/*
			 * getWritableDatabase() :
			 *     以读写方式打开数据库，一旦数据库的磁盘空间满了，数据库就只能读而不能写，
			 *     如果使用的是getWritableDatabase() 方法就会出错。
			 * getReadableDatabase()：
			 *     先以读写方式打开数据库，如果数据库的磁盘空间满了，就会打开失败，当打开
			 *     失败后会继续尝试以只读方式打开数据库。如果该问题成功解决，则只读数据库对象就会关闭，然后返回一个可读写的数据库对象。
			 * */
			db = this.getReadableDatabase();
			String sql = "select count(*) as c from sqlite_master  where type ='table' and name ='"+tableName.trim()+"' ";
			//rawQuery()方法用于执行select语句。
			cursor = db.rawQuery(sql, null);
			/*
			 * 查询出来的cursor的初始位置是指向第一条记录的前一个位置的，
			 * moveToFirst() 指向查询结果的第一个位置。一般通过判断cursor.moveToFirst()的值为true或false来确定查询结果是否为空。
			 * moveToNext()  用来做循环的，一般这样来用：while(cursor.moveToNext()){ }
			 * moveToPrevious()  指向当前记录的上一个记录，是和moveToNext相对应的；
			 * moveToLast()  指向查询结果的最后一条记录，使用cursor可以很方便的处理查询结果以便得到想要的数据
			 * */
			if(cursor.moveToNext()){
				int count = cursor.getInt(0);
				if(count>0){
					result = true;
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return result;
	}
}

